[新機能]Route53 リゾルバー登場! オンプレミス-VPCの相互名前解決が簡単に実現できるようになりました!
はじめに
おはようございます、加藤です。新機能 Route 53 リゾルバーが登場しました、これによって実現できる構成を説明していきます。
New – Amazon Route 53 Resolver for Hybrid Clouds | AWS News Blog
実現できること
オンプレミスからVPC内の名前解決が可能になります。(AmazonProvidedDNSにリクエストを投げれる) 今までは、VPN/Direct Connectで繋がっていたとしても、VPC内にDNSフォワーダが存在しなければ名前解決はできませんでした。
具体的にはVPC内にEC2インスタンスでUnboundを建てたり、Directory ServicesのManaged Microsoft ADのDNS機能を使って対処していました。
Route 53 Resolver の登場によって、これらの対応が不要になります!
やってみた
疑似環境の作成
仮想ルーターのVyOSを使って検証の手間を省きましょう。以下のような疑似環境を作成します。
この環境を構築したい場合は、下記のブログが参考になります。
VyOSを利用したVPN環境構築 | DevelopersIO
Security Groupの作成
必要になるセキュリティグループを作成しておきます。
AWS側
- Route 53 Resolver Endpoint用(Route53-Resolver-SG)
Inbound/Outbound | プロトコル | ポート範囲 | Src/Dest |
---|---|---|---|
Inbound | TCP | 53 | 192.168.0.0/24 |
Inbound | UDP | 53 | 192.168.0.0/24 |
Outbound | すべて | すべて | すべて |
- TestClient用(TestClient-SG)
Inbound/Outbound | プロトコル | ポート範囲 | Src/Dest |
---|---|---|---|
Inbound | ICMP | すべて | 192.168.0.0/24|10.0.0.0/16 |
Outbound | すべて | すべて | すべて |
オンプレミス側
- オンプレミスルーター用(VyOS-SG)
Inbound/Outbound | プロトコル | ポート範囲 | Src/Dest |
---|---|---|---|
Inbound | すべて | すべて | 192.168.0.0/24 |
Outbound | すべて | すべて | すべて |
- Unbound用(Unbound-SG)
Inbound/Outbound | プロトコル | ポート範囲 | Src/Dest |
---|---|---|---|
Inbound | TCP | 53 | 192.168.0.0/24|10.0.0.0/16 |
Inbound | UDP | 53 | 192.168.0.0/24|10.0.0.0/16 |
Outbound | すべて | すべて | すべて |
Route 53 リゾルバー
Route 53 のマネジメントコンソールを開くと Resolver が追加されています。
Dashboard
Inbound endpoints
インバウンドエンドポイントを作成します。
VPCにはAWS側のVPCを指定してください。SGはRoute53エンドポイント用に作成したものを選択します。
エンドポイントを作成するAZ, サブネットはオンプレミスと通信が可能(サブネット範囲やルーティングを考慮する)な所を選びます。
Outbound endpoins
アウトバウンドエンドポイントを同様に作成します。
ルール
オンプレミス側のドメインonpremises.internal
がリクエストされた時にオンプレミス側のDNS(Unbound)へ転送(Forwarding)が必要です。この設定をRoute 53 Resolverではルールと言います。
オンプレミス側のDNS(Unbound)のIPアドレスとポートを指定します。
オンプレミス側DNSサーバー(Unbound)
Unboundを使用してDNSサーバーを構築します。
Amazon Linux 2 でEC2インスタンスを立ち上げて、Unboundをインストールします。
sudo amazon-linux-extras install epel sudo yum -y install unbound --enablerepo=epel sudo systemctl enable unbound && sudo systemctl start unbound
/etc/unbound/conf.d/kensho.conf
を作成します。
server: interface: 0.0.0.0 access-control: 127.0.0.0/8 allow access-control: 10.0.0.180/32 allow access-control: 10.0.1.210/32 allow access-control: 192.168.0.0/24 allow do-ip6: no local-zone: "onpremises.internal." static local-data: "ns.onpremises.internal. IN A 192.168.0.90" local-data: "vyos.onpremises.internal. IN A 192.168.0.51" local-data-ptr: "192.168.0.51 vyos.onpremises.internal" local-data-ptr: "192.168.0.90 ns.onpremises.internal." forward-zone: name: "." forward-addr: 10.0.0.224 forward-addr: 10.0.1.218
設定ファイルのグループをUnboundに変更し、Unboundを再起動します。
sudo chown root:unbound /etc/unbound/conf.d/kensho.conf sudo systemctl restart unbound && sudo systemctl status unbound
下記のパラメータでDHCPオプションセットを作成して、オンプレミス側のVPCに関連付けを行います。
domain-name = onpremises.internal; domain-name-servers = 192.168.0.90;
しばらく待っても良いですが、DNSのアドレスを適用したいので、EC2インスタンスを再起動します。
動作確認
オンプレミス側からの名前解決
# [成功] TestClientのプライベートDNS名を解決 [ssm-user@ip-192-168-0-90 ~]$ dig ip-10-0-0-165.ap-northeast-1.compute.internal ; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> ip-10-0-0-165.ap-northeast-1.compute.internal ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54214 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ip-10-0-0-165.ap-northeast-1.compute.internal. IN A ;; ANSWER SECTION: ip-10-0-0-165.ap-northeast-1.compute.internal. 20 IN A 10.0.0.165 ;; Query time: 2 msec ;; SERVER: 192.168.0.90#53(192.168.0.90) ;; WHEN: Tue Nov 20 09:16:00 UTC 2018 ;; MSG SIZE rcvd: 90 # [成功] AWS側 Private Hosted Zoneに定義された名前の解決(適当に登録したレコード) [ssm-user@ip-192-168-0-90 ~]$ dig sample.sandbox.internal ; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> sample.sandbox.internal ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50287 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sample.sandbox.internal. IN A ;; ANSWER SECTION: sample.sandbox.internal. 59 IN A 192.168.0.1 ;; Query time: 1 msec ;; SERVER: 192.168.0.90#53(192.168.0.90) ;; WHEN: Tue Nov 20 10:06:01 UTC 2018 ;; MSG SIZE rcvd: 68
AWS側からの名前解決
# [成功] UnboundのプライベートDNS名(オンプレDNSに定義された物)を解決 [ssm-user@ip-10-0-0-165 ~]$ dig ns.onpremises.internal ; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> ns.onpremises.internal ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50380 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ns.onpremises.internal. IN A ;; ANSWER SECTION: ns.onpremises.internal. 60 IN A 192.168.0.90 ;; Query time: 10 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Tue Nov 20 09:17:41 UTC 2018 ;; MSG SIZE rcvd: 67 # [成功] AWS側 Private Hosted Zoneに定義された名前の解決(適当に登録したレコード) [ssm-user@ip-10-0-0-165 ~]$ dig sample.sandbox.internal ; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> sample.sandbox.internal ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14983 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sample.sandbox.internal. IN A ;; ANSWER SECTION: sample.sandbox.internal. 60 IN A 192.168.0.1 ;; Query time: 2 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Tue Nov 20 09:18:42 UTC 2018 ;; MSG SIZE rcvd: 68
料金 Amazon Route 53 pricing - Amazon Web Services ※2018/11/30時点で日本語では、記載がありませんでした。 > Route 53 Resolver
Route 53 Resolver endpoints
A Route 53 resolver endpoint includes one or more IP addresses. Each IP address corresponds to one elastic network interface (ENI). A single endpoint can be shared by multiple > VPCs across multiple accounts within the same region. $0.125 per ENI / hour Recursive DNS queries to and from on-premises networks
Only queries that pass through a Route 53 resolver endpoint going to or coming from on-premises resources will be charged. Queries that resolve locally to your Virtual Private > Cloud (VPC) will not be charged.
$0.400 per million queries – first 1 Billion queries / month $0.200 per million queries – over 1 Billion queries / month
エンドポイントの維持に料金が発生します。 1つのENI(1つのエンドポイントのIPアドレス)に対して $0.125/時間 が発生します。例えば、2AZでIN/OUTを作ると4つなので、 $0.500/時間 ですね。 1ヶ月(30日)なら $360.0 です。
また、リクエストあたりの料金も発生します。 10億リクエストまで: 100万リクエスト当り $0.400/月 10億リクエスト以上: 100万リクエスト当り $0.200/月
あとがき
オンプレミス、AWS相互の名前解決が簡単にマネージドサービスで実現できる様になりました。華のあるアップデートではありませんがVPN/DXしてAWSを使っている方にはとても嬉しいアプデなのではないでしょうか。
今までは色々と考慮が必要な名前解決でしたが、これからはResolver使えば大丈夫と思えるのは個人的にすごく嬉しいです。ガンガン活用していきましょう!